#ifndef _SPHERE_H
#define _SPHERE_H

#include "Forme.hpp"

/**
 * Classe implémentant la sphère pour le raytracing. La sphère est
 * définie dans les coordonnées globales par un centre et un rayon.
 *
 * Forme::baryCentre est défini comme le centre de gravité de la
 * Sphere.
 *
 * @author Jean-Marc Comby
 * @author Romain Dequesne
 * @author Johan "Solo" Luisier
 *
 * @date 16 Avril 2004
 */
class Sphere : public Forme
{
 public:
  //constructeurs et destructeurs
  Sphere();
  Sphere(const Coord& pt, const double& r); //sphere = centre et rayon
  Sphere(const Sphere &); // constr. de copie
  ~Sphere();
  Coord trouveIntersection(Rayon const &) const;
  //renvoie le point d intersection
  VecteurU normale(Coord const &) const;
  //renvoie la normale
  bool estDans(Coord const &) const;
  //distance au centre <R
  bool estSur(Coord const &) const;
  //distance au centre = R
	
  // mapping de la sphere. Il faut poser le centre de la sphere sur le plan (y,z)
  // pour un mapping correct
  void mapping(const Coord &, int &i, int &j, const int &frequence, const int &Hauteur, const int &Largeur) const;
	
  //Methode get
  const double& rayon() const;
  const Coord& centre() const;
  std::ostream& affiche(std::ostream& os) const;
  Coord intrinseque(const Coord& pt) const;
  Coord intrinsequeReduite(const Coord& pt, const double& larg) const;
 private:
  /**
   * Centre de la Sphere.
   */
  Coord m_Centre; //centre
  /**
   * Rayon de la Sphere.
   */
  double m_Rayon; //rayon
};

#endif
